package main

import (
	"fmt"
	"os"

	"github.com/topaz-h/studygo/day01/calc"
)

// Person 但是
type Person struct {
	name   string
	age    int8
	dreams []string
}

// SetDreams 是
func (p *Person) SetDreams(dreams []string) {
	// p.dreams = dreams
	p.dreams = make([]string, len(dreams))
	copy(p.dreams, dreams)
}
func main() {
	p1 := Person{name: "小王子", age: 18}
	data := []string{"吃饭", "睡觉", "打豆豆"}
	p1.SetDreams(data)
	// 你真的想要修改 p1.dreams 吗？
	data[1] = "不睡觉"
	fmt.Println(p1.dreams) // ?

	// pakage
	ret := calc.Add(1, 3)
	fmt.Println(ret)
}

type student struct {
	id   int64
	name string
}

var allStu = make(map[int64]*student, 50)

// func main() {
// 	// json.Marshal
// 	for {
// 		start()
// 	}
// }

func start() {
	// 打印菜单
	fmt.Println("***学生管理系统***")
	fmt.Println(`
	查看：1；
	新增：2；
	删除：3；
	退出：4；
	`)
	var (
		types int
	)
	fmt.Print("等待输入菜单：")
	_, err := fmt.Scanln(&types)
	fmt.Printf("你选择了%d这个菜单\n", types)
	if err != nil {
		fmt.Println(err)
	} else {
		switch types {
		case 1:
			showStu()
		case 2:
			addStu()
		case 3:
			deleteStu()
		case 4:
			os.Exit(1)
		default:
			fmt.Println("无效输入")
		}
	}
	// fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

func newStudent(id int64, name string) *student {
	return &student{
		id:   id,
		name: name,
	}
}

func showStu() {
	if len(allStu) == 0 {
		fmt.Println("map为空")
	} else {
		for k, v := range allStu {
			fmt.Printf("学号：%d 姓名：%s\n", k, v.name)
		}
	}
}

func addStu() {
	var (
		id   int64
		name string
	)
	fmt.Print("请输入学号和姓名：")
	_, err := fmt.Scanln(&id, &name)
	if err != nil {
		fmt.Println(err)
	} else {
		s := newStudent(id, name)
		allStu[id] = s
		fmt.Println("成功添加")
	}
}

func deleteStu() {
	var (
		id int64
	)
	fmt.Print("请输入学号：")
	_, err := fmt.Scanln(&id)
	if err != nil {
		fmt.Println(err)
	} else {
		// 判断在不在
		_, ok := allStu[id]
		if ok {
			delete(allStu, id)
			fmt.Println("成功删除")
		} else {
			fmt.Println("查无此人")
		}
	}
}

// JSON序列化：结构体-->JSON格式的字符串--->ajax-->前端
// JSON反序列化：前端-->ajax--->JSON格式的字符串-->结构体
